操作系统的“冷板凳”要坐多久?万字长文解读16年开源老兵的坚持
InfoQ 与阿里云开发者社区联合出品的【开源人说】系列视频第二期正式上线,一起走进开源操作系统龙蜥
马涛:我是在 2006 年加入 Oracle 的,在 Oracle 之前是在 IBM 工作,那会儿其实不是做开源,但对 Linux 还是挺感兴趣,所以后面 Oracle 刚在中国成立一个做操作系统 / 做内核的团队,我就去参加了这个项目。刚去的时候,我的主管问我说你想干什么。由于我之前从来没做过开源,基础比较薄弱,就选择了做测试。可以认为最早我是从 Linux 测试开始干起的。过了大概四五个月后我就发现,好像我也可以做操作系统,内核也可以,然后就去做了开源。发现开源和测试一样,都要和研发人员交流。做了就发现,做内核开发的老外们都挺 nice 的,在沟通上、交流上都挺好。接触了后发现,开源真的是一件很有意思的事情。
我刚加入 Oracle 的时候有两个 mentor,其中一个 mentor 是老外,我个人觉得他是我的入门导师。从他身上我感觉到两点,让我对开源或者说对开源的这些人有一个初步的认识:第一个就是做开源的人,因为大家都是从零开始做起来的,所以他们对于这些刚加入做开源的人都是非常 nice,会提供各种各样无私的帮助。这个其实对我后面带一些新同学做开源有潜移默化的影响。
另一个就是我觉得刚加入内核这个大家庭的时候,Linux 内核都是通过邮件列表来做开发的。当你提一个 patch 到开源社区的时候,开源社区的资深开发人员都会对你的 patch 做详细 review,然后给你很多意见。虽然说你是一个入门的新人,你的 patch 也很 junior,但是他们都会很认真地 review 后给你一些意见,比如 patch 应该怎么写、应该注意哪些格式问题等等。给我的第一感觉是整个开源对新入门的小白非常友好,第二是像一个大家庭。
给大家讲一个小笑话,我一开始做测试的时候,对于做开发还是没什么信心的,内心挺慌的。就因为特别慌,所以给 Linux 内核做第一个贡献(是很小的贡献),提交 patch 的时候,把自己的名字都写错了。当时是用英文的,所以我应该是“Tao Ma”,一慌就写成了“Tao Mao”。
马涛:各种的都有。我说一下 Linux 内核研发的流程是什么样的,还有对新手是怎么提供帮助的。
一般情况下对于内核开发者来说,会从最早最简单的一些问题开始。Linux 内核有一个专门针对新手学习的网站:https://kernelnewbies.org/,它里面会有适合新手看的一些文章。另外,当你真正进入内核研发的时候,一般情况下会提一个 RFC(Requestforchanges/comments),先把你的 idea 提给社区。比如,你觉得内核里某个模块、某个东西需要一些变化。
我认为内核是一个合作非常紧密的组织,内核代码有几千万行,它是分了不同的 maintainer,Linus 肯定是最大的 maintainer,下面分了很多级,每一级都有自己的 maintainer。比如说你想提一个 feature,你就找到这个 feature 所对应的组织,然后提个 RFC,接着这个小组的 maintainer 或者资深开发者就会给你提个 comments,会给你一个非常详细的解释。如果这个 maintainer 觉得你提出的是非常好的问题,那么基本上你就可以开始干了。
在很多情况下,当你提了一个 RFC 以后,相当于这个坑就被你占了,后续就可以不停地提交 patch。当你提交第一版 patch 的时候,maintainer 会 review,会给你些参考意见。一般最开始要求非常严格,从最简单的格式上有无问题,一行代码开头不能有空格、必须用 tab 键开头、一行的长度不能大于 80(最早)。再比如说,一个函数命名的时候要怎么写参数格式、哪个地方要空格、哪个地方不能有空格、等号之间要空格等等。
内核几千万行代码,如果没有非常严格的要求,大家可读性就很差,所以 coding style 是要严格要求的。从最简单的 coding style 开始就会给你提建议,再到后面代码设计的逻辑、错误处理有没有问题、结构上有没有问题,包括你对其他模块的修改会不会产生一些问题,都是非常非常详细的。
我有一个 patchset 大概写了二十多版最后才提交进去的,每次提上去 maintainer 都会给你反馈意见,最后我都麻木了。其实我这还不算多的,我还看见还有发四、五十版的,所以 Linux 内核整个研发机制还是非常严格的,包括对代码要求、对工程质量把控。所以我觉得这个经历对自己的锻炼是非常非常大的。从事 Linux 内核研发,每一行代码都凝聚了很多心血。
马涛:Linux 内核社区确实有非常好的培训机制。为什么很多人不敢去干这件事,我觉得是两个方面:第一个就是整个 Linux 内核代码太庞大了,对于一个新手来说,他可能会无所适从,不知道该从哪儿找到一个合适的切入点。虽然 kernelnewbies 网站上是列了一些东西,但对于新手还不是很友好,因为学习曲线太陡峭了。
第二,大部分人肯定都在欧洲和北美,尤其北美居多。很多情况下你发个邮件很可能就要等晚上或者第二天才回。另外就是,对新人虽然比较 nice,但是他们对代码要求会很严格。如果你不够坚定,可能你发了二十多版都进不去,你就放弃了,从入门到放弃可能就几天的功夫。
马涛:2019 年就在酝酿这个事,2020 年年底开始的,正式对外宣布是在 2021 年云栖大会。
龙蜥社区第一是希望能够跟别的厂商、公司一起来做这个事情,我们有一些提问题的群,我们能知道用户的反馈,也能够帮助中国的其他企业的开发者有所成长。
(图 / 龙蜥操作系统首次亮相云栖大会)
当然更多的考虑是怎么把这个开源运营好,让更多人用起来。在中国操作系统开发人员里面能够普及起来,我觉得这是真正的一个良性循环。过去可能就三、五个人或者十几个人可以搞开源。但现在我们如果真的想把整个开源做起来,就要有很多配套,比如,去跟高校合作、企业合作、开发者合作等。
马涛:我个人在阿里已经 11 年了,经常放在口头的一句话就是“客户第一”。我做龙蜥社区,需要思考的是——我到底想解决什么样的客户问题,如果是不解决客户的任何问题,瞎做或者就为了开源而做开源,其实长久不了的。
短期内,CentOS 停服是我们客户面临的非常迫切的问题。CentOS 8 于 2021 年 12 月底就已经停服了,CentOS 7 宣布在 2024 年停服,留给我们的时间很短很短。那在停服过程中会有什么问题?就是没有任何技术支持了。国内现在有大量的用户都在 CentOS 7、CentOS 8 上。最简单、最基本地解决他们的生存问题,是龙蜥社区短期之内要做的事。
长期来看,替代后得有进步,在考虑客户需求或者燃眉之急以后,我们未来会尝试解决一些自主可控的问题。虽然说现在相对来说力量比较薄弱,但还是非常有机会的。因为都看到了这个问题,也在积蓄自己的力量,包括集合社区所有合作伙伴力量。
希望未来的操作系统应该长什么样子?我们会打造一个什么样的操作系统?我还想补充一点,就是在云计算这个领域,阿里云也是做了很多工作,计算、存储、网络、安全等领域的技术能力都是排第一的。既然在云计算领域里面做到了技术能力的领先,那如果我们能够把云的这些能力赋予到操作系统里面,让操作系统变得不一样,其实是有可能帮助我们在未来颠覆掉整个操作系统的设计和规划的。
如果说我们沿着 Linux 老路走,在积累上会比国外差距偏大,这个是事实,我们也不否认。但是随着云的普及,我们有机会重新定义。即使我们还是用 Linux,但我们尝试重新去规划这个操作系统的发展未来,我个人是有信心的。这也是为什么我觉得还是可以做一些事情,也算是时代给了我们一个机会。
马涛:社区里的角色还是挺多的。有使用者,会提一些问题,包括怎么安装、出了问题怎么修或者提一些 bug 之类的;也有一些合作开发者,想增加一些 feature、想做一些功能;还有高校一些学生,包括一些高校老师。
我个人觉得有两点:第一点,“客户第一”本身不存在一个非常冲突的关系,不管他的角色、身份,我们会笼统认为他是某种程度的客户。但如果说一定要细分,使用产品的肯定是我们的第一客户,这个是我们要明确的。开发者、学生、兴趣爱好者,是第二客户。为什么要区分第一客户、第二客户?因为当他们的观点或者意见发生冲突的时候,有一个法则约束,我们要遵循最终客户。如果说没有冲突的时候,需要都服务好他们。第二,龙蜥实验室的成立是希望大家能够用得更好,同时能够让大家更好地参与社区。我觉得本身做操作系统和其他的开源软件不一样的点是,或多或少都会用到操作系统,所以理论上来说,都是我的客户,或者未来可能都是我的客户。
马涛:我觉得可以拿我自己来类比,我就讲我自己怎么获得社区归属感。还是在 Oracle 的那段经历,我那会儿在 Oracle 开发的是一个集群文件系统,我有 Oracle 的客户,他就是用这个集群文件系统的。个人认为对于一个开发者来说,他获得归属感的这个满足感要远远大于他满足客户的这个满足感。
当时我在做社区开发的时候,春节也在家里趴着写代码,然后去跟他们讨论问题。我的代码被社区接受起来,被用起来,在社区有影响力,这个对我来说非常非常有社区归属感。当我去服务我的客户的时候,要去考虑他们会不会用这个东西、有没有出 bug。这是两种感情。
所以我认为,在龙蜥社区有归属感,是非常非常重要的事情。
马涛:我们确实在做这方面的尝试。内核为什么学习曲线陡峭,因为它本身代码行数很大,涉及的模块特别多,如果对于一个完全不懂的门外汉来说,要接触的概念就非常多,包括内存管理、进程调度、存储管理、网络,而且代码与代码之间是藕断丝连的关系。这些对于新手来说真的是非常困难,尤其你今天看,明天可能就会忘掉。
所以从我入门的经验来看,是想先设计一些简单的任务,让初学者先做。怎么定义简单呢?我们会把操作系统拆分成各个模块,并对模块里面一些非常小的功能写非常明确的 guide(指导意见)给开发者,然后让开发者慢慢加入龙蜥共建。
做 Linux 内核社区还有一个好处。就是当你的 patch 进入到 Linux 内核主线的时候,相当于你的名字就进去了,你就会成为整个 Linux 内核的开发人员,你的名字也会出现在各个 Commit Log 里面。这对于开发人员来说,还是一个可以“吹牛”的地方。
我们能做的就是帮开发者搭一个梯子,让他们更容易去做这个事情。因为对于一个新手来说,没有人搭梯子还是很难。
(图 / 龙蜥社区开发者激励活动)
马涛:有和高校的合作。第一个是清华大学陈渝老师,他也是做操作系统的,之前有一个面向全国高校的操作系统大赛,龙蜥社区出了一些操作系统相关的题目,希望培养他们对于操作系统的兴趣。
另外就是和北大合作,龙蜥走进北大课堂,在北大软件与微电子学院面向研究生同学们开了一门精品课程,讲授怎么做操作系统里面的一些核心组件等。
(图 / 龙蜥社区走进北大课堂)
我们还参与了教育部产学合作协同育人计划,这个较前两个更宽泛一点。我们会跟高校老师一起合作,比如写一些教材、做一些实验等。我个人觉得,操作系统的书很多的,我们缺的是实验操作系统怎么去动手,让他们去提交 patch 也好、发补丁也好或者是给内核做优化,这是比较重要的。龙蜥实验室就是方便开发者实际动手操作,希望更多人能用起来。
马涛:操作系统我觉得最重要是搭个梯子、让大家都更容易地能做这个事。如果有这个梯子,我个人觉得很多人会愿意做。
本身对于整个高校的学生来说,做操作系统的人相对会偏少一点,这个我不否认。但是我想说,现在毕竟不像很久以前了,你做个系统可能都不一定找到工作,这样全中国想做操作系统的人或者愿意做操作系统的公司也没几个。现在全国做操作系统的公司很多,阿里、华为、腾讯、百度,还有包括很多互联网公司,包括 OPPO、vivo、小米。所以整个行业对大学生有潜移默化的影响,既能够给他们提供一个梯子,又能够在就业上有很多保障,慢慢地,这个情况会扭转过来。做操作系统,有几万人已经很不错了。
马涛:这个问题真的是一直在思考。其实我们做 Linux 操作系统的,肯定就看 Linux 内核。每年 Linux 内核的补丁数排名前面的有各种各样的公司,Intel、Google、Facebook 等都在做 Linux 内核,最核心一点就是所有参与开源社区做研发的公司,一定要有适合他公司的商业模式在里面。
因为看 Linux 内核的奉献者列表,排名前十的基本上都是各大公司,可能到排十几二十的时候会有一个 hobbyist。有 hobbyist 是很好的一件事,但是更重要的是需要头部的这些公司能够为这个社区做很大的贡献。这些大公司参与社区,他们愿意投几百甚至几千个人,我觉得这是这个社区存在的一个非常重要的意义。
社区要帮助参与进来的企业找到一个非常合理的商业模式,才是社区能够良性发展最核心的一点。我个人认为,做好以下两点,这个开源社区的生态才算比较成功的。第一,有很多公司参与进来为社区服务;第二,所有的公司都能在社区里找到自己合理的商业模式,并且能够围绕商业模式打造自己的核心竞争力。
马涛:我可以举几个例子解释。第一,龙蜥不能脱离中国国情和现在的发展。龙芯最近刚把 LoongArch 架构的 gcc 合并到 Linux gcc 主线上。但 LoongArch 体系架构出现已经有一两年了,在这一两年时间里是没有办法从上游社区得到任何帮助的,因为还没进去。那这时候如果国内企业又要用,怎么办?这时候就需要一个操作系统发行版来填补这个空白,龙蜥就能提供这样的平台,提前把龙芯包括国内其他芯片厂商的产品让客户用起来。
像国外的一些发行厂商,对于国内芯片支持不是很好,可能也有一些市场或者其他方面因素考虑。但国内的芯片厂商的正在快速增长,包括阿里倚天、龙芯、兆芯、申威,他们需要有一个操作系统来支撑,这些厂商能够从龙蜥获取到营养。
第二,云对于操作系统的影响还是有一些。阿里云在这里面做了很多的工作,有可能会影响到未来操作系统的发展。一是在国内的硬件、软件都在快速发展,需要像龙蜥这样的操作系统社区快速满足需求。二是在和上游地区达成一致以后,把上游补丁 backport 回来就可以。但是中间这段时间,我们是需要能够满足所有客户需求的,我觉得这个就是我们能够给企业带来的最大价值。
马涛:核心我觉得还是企业商业化,像统信软件、中科方德、万里红等企业,其实都会基于龙蜥出自己的商业发行版提供给客户。但因为毕竟是一个社区版本,所以有两个比较大的问题。
第一,响应客户肯定是不像商业公司那么快速。因为很可能你发个 issue,万一这个人比较忙,可能明天才能看到。当这种情况发生的时候,商业公司是可以提供明确的 SLA 保证。
第二,商业公司提供了非常严肃的兜底服务。比如说,派工程师去现场排查问题、提供软件升级服务、提供全生命周期管理等。那对于一个社区来说,往往就 focus 在最新的发行版本上,可能会有几个 LTS 版本,或者说如果有问题了也可能会考虑修复的成本。但对于商业化公司来说,有一整套完整的体系。我们把操作系统的能力贡献出去,他们围绕这些能力做自己的商业化服务,相当于是互补的模式。
马涛:阿里是不做操作系统这个生意的。那我们的商业利益到底是什么?所有在龙蜥上跑的系统在阿里云上可以跑得很好。只要用到龙蜥,就会想到龙蜥是阿里参与并做出重大贡献的,那企业在选择上云的时候就会考虑上阿里云。
马涛:我只能说这是阿里的一个商业利益。因为我现在代表龙蜥理事长,希望所有参与龙蜥的公司都能找到自己的商业利益。
马涛:我是这么想的,我也感谢龙蜥社区给了我一个机会,因为之前无论是在 Oracle、淘宝还是阿里云,其实都是代表公司在为这个社区做贡献。但如果说你跳出公司的思维,从社区的角度去看这个事情,你就会发现考虑问题的视角会发生不一样的变化,比如作为龙蜥社区的理事长,要考虑怎么让社区里所有的企业都能够从中获利。社区如果要长久发展,那就需要平衡制衡,不能阿里一家独大,如果一家独大,这个社区怎么玩呢?很多时候必须站在这个龙蜥社区理事长角度去考虑问题,才能让这个社区更加公正、公平、开放。
马涛:客观来说,龙蜥毕竟是个 Linux 社区,所以和 Linux 社区相比,有很多相同的也有很多不同。相同的点就是刚才前面提到的学习开源还是比较陡峭的,大家很难去把爱好者去培养成新的开发者,确实会比较费劲。
但我想说几点不同,第一点是,过去大部分中国做 Linux 开发的都是参与者,没有几个是主导者。现在有龙蜥和欧拉,我一直觉得我们有各自的特点和不同的出发点,但是有一点我认为是一致的,一起促进中国操作系统产业的发展,一起把中国整个操作系统人才的厚度聚起来。所以我觉得在中国做操作系统,第一要扎根中国,想着怎么去把中国的操作系统产业做起来,把中国的操作系统人才培养起来。这个事情很难,但时代赋予了我们机会,我们还是要坚持,还是有信心的。现在相对 2006 年那会儿已经好很多了。第二点是,现在国内对操作系统产业、对基础软件产业的重视程度也是今非昔比的,所以我觉得我们是有机会做出来的,也需要好好做。
马涛:首先从我的个人的观点来说,毕竟中国是需要跟国际有沟通和交流,可以看到最核心的 Linux 内核研发人才或者资深人士都在国际上的。所以我觉得首先要做到跟国际社区非常融洽的关系,和上下游打成一片。现在我们各种各样的补丁不会藏在龙蜥社区里面、不向 Linux 上游社区贡献,我们同时会不停地往上游社区去推。如果上游社区(就是 Linux)接受了,那么我就会再把它拉回来,这个工作我们会持续做的。
第二,我觉得是需要立足国内的不同环境,有一些不同的常识和打法。其实最简单的,比如老外其实在用邮件列表,国内有钉钉群、微信群,但是如何利用新形式,把钉钉群、微信群运营起来,把这些群成员吸引到社区里、让他们也能够参与到社区开发里面,也是跟国外不一样的点。
马涛:这个我可以直接回答,没问题。我们第一条会鼓励他去上游社区,我们团队有一个同学刚刚提了一些 patch 到上游社区,被邀请去参加美国开的关于文件系统的峰会。我们会鼓励所有人参与国际社区,参与国际社区的标准制定。如果说你总是把他 keep 在自己的小圈里面,那他永远得不到成长的机会。就跟咱们培养小孩子一样,你要让他出去见世面,让他知道人外有人、山外有山,他才能够成长得更好。所以说,我们不但不会阻止,还会鼓励所有社区人积极参与上游社区的贡献,在上游社区里面建立影响力。我们的目标肯定是说影响整个未来 Linux 社区的发展,这是我们最核心的一个目的。
马涛:教训、经验都有。我分享一个经验、一个教训。
我们本来认为在国内运营一个操作系统社区是很难的。但我发现,如果能够找到一个非常共性的点,同时能够为开发者构建一个非常好的基础设施或平台,其实还是相对可以的,即使在基础软件如此难的领域里面也是可以的。反过来说,国内开源社区的蓬勃发展是非常有希望的。现在在国内搞开源没有想象的那么难。如果你想在中国搞开源,想通过开源成立一个公司,我觉得真的是很有机会的。那接下来说一个教训,我觉得可能谈教训更有意思一点。开源是这样的,很多时候我的思维可能还停留在跟老外做事情的风格上面。其实在中国确实需要因地制宜做一些改变。在国内我们已经习惯了用钉钉、微信这种即时通讯工具了,国外的话可能还是在用邮件,你发个邮件可能第二天才会给你答案的,这是很正常的,因为时差。当我的用户提出一个问题的时候,你要是在钉钉群或者微信群里面一两个小时没人回,他可能就会有点不耐烦了。之前觉得老外响应快多了,但现在中国的节奏很快。所以在初级阶段,我们还是要积极响应所有的用户问题,尤其是大家适应了这种快节奏文化的。
在开技术委员会或者理事会会议时,我都会请求,碰到用户在群里提问时,尽快回答。现在我们也有一些值班制度,可以让用户在用操作系统或者在开发过程中遇到一些问题的时候,能够快速得到答案。龙蜥已经构建了比较完善的一个答疑体系,他们很多会问一些很着急的问题,比如安装,就非常希望你赶紧告诉我怎么回事,那我们的值班制度就可以非常快速地告诉他该怎么办。但老外的话经常要第二天才会有人会理你的,大家也习以为常。但在中国这块儿其实还是不一样。
(图 / 龙蜥社区首届理事大会)
马涛:对的。现在大家都是在摸索阶段,那其实如果未来有更多不同国家的人参与进来,就会有不一样的理念产生,我觉得这是一个社区走向成熟必然要面对的一些问题。龙蜥社区都是在摸索中前进的。
虽然我参与 Linux 上游社区这么多年,但在中国运作的社区,包括自己运作的社区,其实还有很多不一样的点需要去尝试的。包括我之前就是一个开发者,没做过运营,也没做过构建社区基础设施这整套东西,都是在不断的运营,不断的学习,不断的进步。
传美的被勒索千万美元,连夜天价聘请安全专家;软银抵押一半阿里股票,孙正义:“为过去贪图暴利感到羞愧”;谷歌数据中心爆炸 |Q 资讯
从 10 月 19 日起,GitLab 将对所有免费用户强制实施存储限制
活动推荐🔥Kubernetes 原生能力的不足如何解决?
🔥分布式云云边一体如何轻量化交付?
🔥Kubernetes 集群服务如何无感知迁移弹性容器服务?
ArchSummit 全球架构师峰会北京站来了!全面为你解读企业云原生成本优化最佳实践。
8 月 18 日,北京富力万丽酒店等你来!扫码立即报名!